﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MJM.RPP.EntidadesNegocio;
using MJM.SPP.EntidadesNegocio;
using MJM.Principal;


namespace wRegPadron.frmOpciones
{
    public partial class ucPermisosUsuario : System.Web.UI.UserControl
    {
        protected List<PersonaE> lst;
        protected static List<SubOpcionEN> lstSubOpcionEN;
        protected static String Usuario;
        protected static String ModuloSeleccionado;
        protected static List<GrupxUsuEN> lstGrupxUsuEN;
        public static PersonaE objPersonaE;
        protected static int idAsignacion;
        protected static String idPersonaSelect;

        public void SetPersona(PersonaE obj)
        {
            objPersonaE = obj;
        }

        public void CargarCombo()
        {
            List<GrupoUsuariosEN> lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().ListarGeneral();
            GrupoUsuariosEN obj = new GrupoUsuariosEN();
            obj.USUGRU_chNOMGRU = "Seleccione grupo";
            obj.USUGRU_P_inID = 0;
            lstGrupoUsuarios.Insert(0, obj);
            ddlGrupos.DataSource = lstGrupoUsuarios;
            ddlGrupos.DataValueField = "USUGRU_P_inID";
            ddlGrupos.DataTextField = "USUGRU_chNOMGRU";
            ddlGrupos.DataBind();
        }

        protected void Page_Load(object sender, EventArgs e)
        {           
            if (!IsPostBack)
            {
                List<GrupoUsuariosEN> lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().ListarGeneral();
                ddlGrupoDefecto.SelectedValue = MediadorCN.GetGrupxUsu().ObtenerGrupoDefectoWeb().ToString();

                ddlGrupoDefecto.DataSource = lstGrupoUsuarios;
                ddlGrupoDefecto.DataValueField = "USUGRU_P_inID";
                ddlGrupoDefecto.DataTextField = "USUGRU_chNOMGRU";
                ddlGrupoDefecto.DataBind();
                ddlGrupoDefecto.SelectedValue = MediadorCN.GetGrupxUsu().ObtenerGrupoDefectoWeb().ToString();

                ddlGrupoDefecto2.DataSource = lstGrupoUsuarios;
                ddlGrupoDefecto2.DataValueField = "USUGRU_P_inID";
                ddlGrupoDefecto2.DataTextField = "USUGRU_chNOMGRU";
                ddlGrupoDefecto2.DataBind();
                ddlGrupoDefecto2.SelectedValue = MediadorCN.GetGrupxUsu().ObtenerGrupoDefectoMuni().ToString();

                if (this.lst == null)
                {
                    this.lst = new List<PersonaE>();
                    tvModulos.Visible = false;
                    VentanaAsignarGrupo.Visible = false;
                    btnNuevoGrupo.Visible = false;
                }
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuPermisos");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
            }
        }

        protected void btnBuscarPersona_Click(object sender, EventArgs e)
        {
            lblRegistro.Text = "";
            lbl1.Visible = false;
            btnNuevoGrupo.Visible = false;
            lblMensajeGrupos.Visible = false;
            gvGruposUsuario.Visible = false;
            lblMensaje.Text = "";
            if (txtApellidoMaterno.Text != "" || txtApellidoPaterno.Text!="" || txtNroDocumento.Text!="")
            {
                this.lst = MediadorCN.GetPersona().Listar(1,txtNroDocumento.Text,txtApellidoPaterno.Text,txtApellidoMaterno.Text);

                if (this.lst.Count > 0)
                {
                    gvUsuarios.DataSource = this.lst;
                    gvUsuarios.DataBind();
                    lblErrorBusq.Text = "";
                    lbl1.Visible = true;
                    btnNuevoGrupo.Visible = false;
                    VentanaAsignarGrupo.Visible = false;
                }
                else
                {
                    lblErrorBusq.Text = "No se econtraron usuarios.";
                    lbl1.Visible = false;
                    btnNuevoGrupo.Visible = false;
                    VentanaAsignarGrupo.Visible = false;
                    lblMensajeGrupos.Visible = false;
                    lblMensaje.Text = "";
                }
            }
            else
            {
                lblErrorBusq.Text = "Ingrese los datos solicitados.";
                lbl1.Visible = false;
                btnNuevoGrupo.Visible = false;
                lblMensajeGrupos.Visible = false;
                lblMensaje.Text = "";
            }
        }

        protected void gvUsuarios_Seleccionar(object sender, GridViewCommandEventArgs e)
        {
            lblRegistro.Text = "";
            string idpersona;
            gvGruposUsuario.Visible = true;
            int index=-1;            
            if (e.CommandName == "Permitir")
            {
                index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvUsuarios.Rows[index];
                idpersona = Server.HtmlDecode(row.Cells[0].Text).ToString();
                idPersonaSelect = idpersona;
                Usuario = MediadorCN.GetUsuario().Obtener(idPersonaSelect).Usuario;
                lstGrupxUsuEN = MediadorCN.GetGrupxUsu().Listar(Usuario);
                gvGruposUsuario.DataSource = lstGrupxUsuEN;
                gvGruposUsuario.DataBind();
                if (lstGrupxUsuEN.Count > 0)
                {
                    lblMensajeGrupos.Visible = true;
                    lblMensaje.Text = "El usuario seleccionado es: " + Usuario;
                    VentanaAsignarGrupo.Visible = false;
                    btnNuevoGrupo.Visible = false;
                }
                else
                {
                    VentanaAsignarGrupo.Visible = false;
                    btnNuevoGrupo.Visible = true;
                    lblMensaje.Text = Usuario + " no está asignado a ningún grupo de opciones";
                    lblMensajeGrupos.Visible = false;
                }
                // VentanaAgregarGrupo.Visible = true;
            }
        }

        protected void gvGruposUsuario_Seleccionar(object sender, GridViewCommandEventArgs e)
        {
            lblRegistro.Text = "";
            int index=-1;
            if (e.CommandName == "Editar")
            {
                CargarCombo();
                index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvGruposUsuario.Rows[index];
                idAsignacion = Convert.ToInt32(Server.HtmlDecode(row.Cells[1].Text).ToString());
                VentanaAsignarGrupo.Visible = true;
                btnAceptar.Visible = false;
                btnEditar.Visible = true;
            }
            else if (e.CommandName == "Eliminar")
            {
                index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvGruposUsuario.Rows[index];
               int idGrupo=Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text).ToString());
                GrupxUsuEN objEN = new GrupxUsuEN();
                objEN = MediadorCN.GetGrupxUsu().Obtener(Usuario, idGrupo);
                MediadorCN.GetGrupxUsu().Eliminar(objEN);
                lstGrupxUsuEN = MediadorCN.GetGrupxUsu().Listar(Usuario);
                gvGruposUsuario.DataSource = lstGrupxUsuEN;
                gvGruposUsuario.DataBind();
                if (lstGrupxUsuEN.Count == 0)
                {
                    lblMensaje.Text = Usuario + " no está asignado a ningún grupo de opciones";
                    lblMensajeGrupos.Visible = false;
                    btnNuevoGrupo.Visible = true;
                }
            }
        }

        protected void gvUsuarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvUsuarios.PageIndex = e.NewPageIndex;
            gvUsuarios.DataSource = MediadorCN.GetPersona().Listar(1, txtNroDocumento.Text, txtApellidoPaterno.Text, txtApellidoMaterno.Text);
            gvUsuarios.DataBind();
        }

        protected void ddlGrupos_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblRegistro.Text = "";
            tvModulos.Nodes.Clear();
            int cont1=0, cont2=0, cont3=0;
            List<AccesoGrupoEN> lstAccesoGrupoEN1, lstAccesoGrupoEN2, lstAccesoGrupoEN3, lstAccesoGrupoEN4;
            int idGrupo=Convert.ToInt32(ddlGrupos.SelectedValue);
            if (ddlGrupos.SelectedIndex != 0)
            {         
                tvModulos.Visible = true;
                TreeNode nodo,nodo2,nodo3,nodo4;
                lstAccesoGrupoEN1 = MediadorCN.GetAccesoGrupo().Listar_Programa_Grupo(idGrupo);
                for (int i = 0; i < lstAccesoGrupoEN1.Count; i++)
                {                   
                    if (lstAccesoGrupoEN1[i].PERGRU_inACT == 1)
                    {
                        
                        nodo = new TreeNode();
                        nodo.Text = lstAccesoGrupoEN1[i].PROMUN_chNOMPRO;
                        tvModulos.Nodes.Add(nodo);
                        lstAccesoGrupoEN2 = MediadorCN.GetAccesoGrupo().Listar_Modulos_Grupo(idGrupo, lstAccesoGrupoEN1[i].PROMUN_inID);
                        for (int j = 0; j < lstAccesoGrupoEN2.Count; j++)
                        {                            
                            if (lstAccesoGrupoEN2[j].PERGRU_inACT == 1)
                            {
                                nodo2 = new TreeNode();
                                nodo2.Text = lstAccesoGrupoEN2[j].OPTGEN_chNOMMEN;
                                tvModulos.Nodes[cont1].ChildNodes.Add(nodo2);
                                lstAccesoGrupoEN3 = MediadorCN.GetAccesoGrupo().Listar_Opciones_Grupo(idGrupo, lstAccesoGrupoEN2[j].OPTGEN_P_inID, lstAccesoGrupoEN1[i].PROMUN_inID);
                                for (int z = 0; z < lstAccesoGrupoEN3.Count; z++)
                                {                                    
                                    if (lstAccesoGrupoEN3[z].PERGRU_inACT == 1)
                                    {
                                        nodo3 = new TreeNode();
                                        nodo3.Text = lstAccesoGrupoEN3[z].SUBOPT_chNOMSOP;
                                        tvModulos.Nodes[cont1].ChildNodes[cont2].ChildNodes.Add(nodo3);
                                        lstAccesoGrupoEN4 = MediadorCN.GetAccesoGrupo().Listar_Controles_Grupo(idGrupo, lstAccesoGrupoEN2[j].OPTGEN_P_inID, lstAccesoGrupoEN3[z].SUBOPT_P_inID, lstAccesoGrupoEN1[i].PROMUN_inID);
                                        for (int k = 0; k < lstAccesoGrupoEN4.Count; k++)
                                        {
                                            if (lstAccesoGrupoEN4[k].PERGRU_inACT == 1)
                                            {
                                                nodo4 = new TreeNode();
                                                nodo4.Text = lstAccesoGrupoEN4[k].OPTCON_chNOMCON;
                                                tvModulos.Nodes[cont1].ChildNodes[cont2].ChildNodes[cont3].ChildNodes.Add(nodo4);
                                            }
                                        }
                                        cont3++;
                                    }
                                }
                                cont2++;
                                cont3 = 0;
                            }
                        }
                        cont1++;
                        cont2 = 0;
                        cont3 = 0;
                    }
                }
                tvModulos.DataBind();
                tvModulos.ExpandAll();
                for (int i = 0; i < tvModulos.Nodes[0].ChildNodes.Count; i++)
                {
                    tvModulos.Nodes[0].ChildNodes[i].Collapse();
                }
            }
            else
                tvModulos.Visible = false;
        }      

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            GrupxUsuEN objGrupxUsuEN = new GrupxUsuEN();
            objGrupxUsuEN.USUGRU_P_inID=Convert.ToInt32(ddlGrupos.SelectedValue);
            objGrupxUsuEN.USUPAD_P_chUSU = Usuario;
            int codigo = MediadorCN.GetGrupxUsu().Insertar(objGrupxUsuEN);


            if (codigo > 0)
            {
                btnNuevoGrupo.Visible = false;
                VentanaAsignarGrupo.Visible = false;
                lblRegistro.Text = "Se completó el registro correctamente.";
                lblMensaje.Text = "";
                lstGrupxUsuEN = MediadorCN.GetGrupxUsu().Listar(Usuario);
                gvGruposUsuario.DataSource = lstGrupxUsuEN;
                gvGruposUsuario.DataBind();
            }
            else
            {
                lblRegistro.Text = "No se pudo completar el registro.";
            }
        }

        protected void btnNuevoGrupo_Click(object sender, EventArgs e)
        {
            CargarCombo();            
            btnNuevoGrupo.Visible = false;
            btnAceptar.Visible = true;
            btnEditar.Visible = false;
            VentanaAsignarGrupo.Visible = true;
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        { 
             GrupxUsuEN objEN = new GrupxUsuEN();
             objEN.USUASI_P_inID = idAsignacion;
             objEN.USUGRU_P_inID = Convert.ToInt32(ddlGrupos.SelectedValue);
             objEN.USUASI_inFLAELI = 1;
             int codigo = MediadorCN.GetGrupxUsu().Modificar(objEN);

             if (codigo > 0)
             {
                 lblRegistro.Text = "Se actualizó el permiso del usuario satisfactoriamente";
                 VentanaAsignarGrupo.Visible = false;
                 btnEditar.Visible = false;
                 btnAceptar.Visible = true;
                 lstGrupxUsuEN = MediadorCN.GetGrupxUsu().Listar(MediadorCN.GetUsuario().Obtener(idPersonaSelect).Usuario);
                 Usuario = MediadorCN.GetUsuario().Obtener(idPersonaSelect).Usuario;                
                 gvGruposUsuario.DataBind();
             }
        }

        protected void btnCambiar_Click(object sender, EventArgs e)
        {
            GrupxUsuEN objGrupxUsuEN=new GrupxUsuEN();
            objGrupxUsuEN.USUGRU_P_inID = Convert.ToInt32(ddlGrupoDefecto.SelectedValue);
            if (0 < MediadorCN.GetGrupxUsu().ActualizarGrupoDefectoWeb(objGrupxUsuEN))
                lblErrorCambio.Text = "Se ha actualizado el grupo correctamente";
            else
                lblErrorCambio.Text = "No se pudo actualizar el grupo";
            lblErrorCambio2.Text = "";
        }

        protected void btnCambiar2_Click(object sender, EventArgs e)
        {
            GrupxUsuEN objGrupxUsuEN = new GrupxUsuEN();
            objGrupxUsuEN.USUGRU_P_inID = Convert.ToInt32(ddlGrupoDefecto2.SelectedValue);
            if (0 < MediadorCN.GetGrupxUsu().ActualizarGrupoDefectoMuni(objGrupxUsuEN))
                lblErrorCambio2.Text = "Se ha actualizado el grupo correctamente";
            else
                lblErrorCambio2.Text = "No se pudo actualizar el grupo";

            lblErrorCambio.Text = "";
        }

        protected void btnAsignarGrupo_Click(object sender, EventArgs e)
        {
            List<PersonaTramiteEN> lstPersonas = MediadorCN.GetPersonaTramite().ListarTodos();
            List<PersonaTramiteEN> lstaux = new List<PersonaTramiteEN>();
            GrupxUsuEN obj = new GrupxUsuEN();
            List<GrupxUsuEN> aux = MediadorCN.GetGrupxUsu().ListarTodos();
            int grupodef = MediadorCN.GetGrupxUsu().ObtenerGrupoDefectoMuni();
            bool enc=false;
            int count=0;
            for (int i = 0; i < lstPersonas.Count; i++)
            {
                enc = false;
                for (int j = 0; j < aux.Count; j++)
                {
                    if (lstPersonas[i].Usuario.ToUpper() == aux[j].USUPAD_P_chUSU.ToUpper())
                    {
                        enc = true;
                        break;
                    }
                }
                if (!enc)
                {
                    obj = new GrupxUsuEN();
                    obj.USUGRU_P_inID = grupodef;
                    obj.USUPAD_P_chUSU = lstPersonas[i].Usuario;
                    lstaux.Add(lstPersonas[i]);
                    MediadorCN.GetGrupxUsu().Insertar(obj);
                    count++;
                }
            }
            gvUsuariosNuevos.DataSource = lstaux;
            gvUsuariosNuevos.DataBind();
            lblErrorCambio2.Text = "Se asignaron los permisos de " + count.ToString() + " personas";
        }      
    }
}